package gruppoF;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

import server.IHTTPServer;

public class MyServer implements IHTTPServer{

	@Override
	public ArrayList<String> elaboraRispostaHTTP(List<String> richiestaHTTP) {
		
		ArrayList<String> risposta=new ArrayList<String>();
		
		Collections.addAll(risposta, "HTTP/1.1 200 OK", 
				"Date: Tue, 01 Apr 2014 08:41:20",
				"Content-Type: text/html; charset=utf-8",
				"");
		
		GestoreRisposta0 gestore = new GestoreRisposta0(controllaURL(richiestaHTTP));
		
		try {
			ArrayList<String> temp = gestore.getRisposta();
			for (int i = 0; i < temp.size(); i++) {
				risposta.add(temp.get(i));
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println(controllaURL(richiestaHTTP).toString());
		
		
		
		return risposta;
	}
	
	/* TODO
	 * 
	 * a questo metodo manca un Javadoc che documenti un po' quello che fa...
	 * ... visto che ha anche tutte quelle righe di codice!!
	 * 
	 * .... Brutto parametriservizio.add("1"); e simili!!!
	 * 
	 */
	public ArrayList<String> controllaURL(List<String> richiestaHTTP) {
		
		ArrayList<String> parametriservizio = new ArrayList<String>();

		String url = richiestaHTTP.get(0);

		StringTokenizer tk = new StringTokenizer(url);
		tk.nextToken("/");
		String servLine = tk.nextToken(" ");
		StringTokenizer tk2 = new StringTokenizer(servLine);

		String servName = tk2.nextToken("?").substring(1);

		System.out.println(servName);

		if (tk2.hasMoreTokens()) {
			String parameters = tk2.nextToken();
			System.out.println(parameters);
			
			if(servName.equalsIgnoreCase("inserisci")){
				parametriservizio.add("1");
				parametriservizio.add(parameters);
			}
			if(servName.equalsIgnoreCase("uscite")){
				parametriservizio.add("2");
				parametriservizio.add(parameters);
			}
			if(servName.equalsIgnoreCase("sintesi")){
				parametriservizio.add("3");
				parametriservizio.add(parameters);
			}
			if(servName.equalsIgnoreCase("registro")){
				parametriservizio.add("4");
				parametriservizio.add(parameters);
			}
			if(servName.equalsIgnoreCase("residui")){
				parametriservizio.add("6");
				parametriservizio.add(parameters);
			}
			if(servName.equalsIgnoreCase("ritardi_consegna")){
				parametriservizio.add("7");
				parametriservizio.add(parameters);
			}
			
			
		} else {

			if (servLine.endsWith(".html")) {
				parametriservizio.add("0");
				parametriservizio.add(servLine.substring(1));//ATTENZIONE AGLI SPAZI!!!!
			}
			if (servLine.equalsIgnoreCase("operatori")){
				parametriservizio.add("5");
			}

		}
     
		return parametriservizio;

	}
}